package com.easymall.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FormValidation {

    public static String usernameReg = "^[a-zA-Z_][a-zA-Z0-9_-]{4,15}$";
    public static String passwordRge = "^.*(?=.{6,})(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$";
    public static String emailReg = "^([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4})$";

    private FormValidation(){}

    /**
     * 判断字符串是否是null或空字符串
     * @param value 需要判断的字符串
     * @return true-字符串为null或空字符串  false-字符串不为null或空字符串
     */
    public static boolean isNullValue(String value){
        if (null == value || "".equals(value)) {
            return true;
        }
        return false;
    }


    /**
     * 验证用户名
     * @param fieldName 表单字段名
     * @param value 用户名
     * @return  错误信息map：键为String，值为String[]
     */
    public static Map<String, List<String>> validationUsername(String fieldName, String value){
        Map<String, List<String>> map = new HashMap<>();
        List<String> errorList = new ArrayList<>();
        if (isNullValue(value)){
            errorList.add("用户名不能为空!");
        } else {
            if (!value.matches(usernameReg)) {
                errorList.add("用户名格式不正确！");
            }
        }
        if (errorList.size() != 0) {
            map.put(fieldName, errorList);
        }

        return map;
    }

    /**
     * 验证密码
     * @param fieldName 表单字段名
     * @param value1 用户名
     * @return  错误信息map：键为String，值为String[]
     */
    public static Map<String, List<String>> validationPassword(String fieldName, String value1, String value2){
        Map<String, List<String>> map = new HashMap<>();
        List<String> errorList = new ArrayList<>();
        if (isNullValue(value1)) {
            errorList.add("密码不能为空!");
        } else {
            if (false /*!value1.matches(passwordRge)*/) {
                errorList.add("密码格式不正确！");
            } else if (!value1.equals(value2)){
                errorList.add("两次密码不一致！");
            }
        }
        if (errorList.size() != 0) {
            map.put(fieldName, errorList);
        }
        return map;
    }

    /**
     * 验证昵称
     * @param fieldName 表单字段名
     * @param value 用户名
     * @return  错误信息map：键为String，值为String[]
     */
    public static Map<String, List<String>> validationNickname(String fieldName, String value){
        Map<String, List<String>> map = new HashMap<>();
        List<String> errorList = new ArrayList<>();
        if (isNullValue(value)) {
            errorList.add("昵称不能为空!");
        } else {
            if (value.length() < 2) {
                errorList.add("昵称最短2个字符！");
            }
        }
        if (errorList.size() != 0) {
            map.put(fieldName, errorList);
        }
        return map;
    }

    /**
     * 验证邮箱
     * @param fieldName 表单字段名
     * @param value 用户名
     * @return  错误信息map：键为String，值为String[]
     */
    public static Map<String, List<String>> validationEmail(String fieldName, String value){
        Map<String, List<String>> map = new HashMap<>();
        List<String> errorList = new ArrayList<>();
        if (isNullValue(value)) {
            errorList.add("邮箱不能为空!");
        } else {
            if (!value.matches(emailReg)) {
                errorList.add("邮箱格式不正确！");
            }
        }
        if (errorList.size() != 0) {
            map.put(fieldName, errorList);
        }
        return map;
    }

    /**
     * 验证验证码
     * @param fieldName 表单字段名
     * @param value 用户名
     * @return  错误信息map：键为String，值为String[]
     */
    public static Map<String, List<String>> validationCode(String fieldName, String value){
        Map<String, List<String>> map = new HashMap<>();
        List<String> errorList = new ArrayList<>();
        if (isNullValue(value)) {
            errorList.add("验证码不能为空!");
        } else {
            if (value.length() < 2) {
                errorList.add("验证码格式不正确！");
            }
        }
        if (errorList.size() != 0) {
            map.put(fieldName, errorList);
        }
        return map;
    }

}


